package com.yfp.operation.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.yfp.common.core.domain.R;
import com.yfp.operation.domain.MarCoupon;
import com.yfp.operation.domain.dto.*;
import com.yfp.operation.domain.vo.*;
import com.yfp.operation.domain.dto.*;
import com.yfp.operation.domain.vo.*;

import java.util.List;

/**
 *
 * @description 针对表【mar_coupon(优惠券)】的数据库操作Service
 * @createDate 2024-07-12 15:49:42
 */
public interface MarCouponService extends IService<MarCoupon> {

    /**
     * 新增营销活动
     *
     * @param marCoupon
     * @return
     */
    R<Void> addMarCoupon(MarCoupon marCoupon);

    /**
     * 多条件获取活动列表
     *
     * @param couponQueueVO
     * @return
     */
    List<MarCouponVO> selectMarCoupon(CouponQueueDTO couponQueueVO);

    /**
     * 活动列表数据补全
     *
     * @param marCouponVOS
     * @return
     */
    List<MarCouponVO> complementListData(List<MarCouponVO> marCouponVOS);

    /**
     * 套餐列表-数据API
     *
     * @param couponId
     * @return
     */
    R<MarCouponDataVO> getMarCouponData(Long couponId);

    /**
     * 删除活动
     *
     * @param couponId
     */
    void deleteMarCoupon(Long couponId, Integer status);

    /**
     * 领取优惠券列表
     *
     * @param acquireCouponDTO
     * @return
     */
    List<AcquireListVO> acquireCouponList(AcquireCouponDTO acquireCouponDTO);

    /**
     * 发放优惠券
     *
     * @param couponIds
     */
    R<List<GrantDetailVO>> grant(List<Long> couponIds);

    /**
     * 根据优惠券id获取数据
     *
     * @param couponId
     * @return
     */
    MarCoupon selectById(Long couponId);

    /**
     * 进行中优惠券列表
     *
     * @param couponQueueDTO
     * @return
     */
    R<List<MarCouponVO>> getByTypeMarCoupon(CouponQueueDTO couponQueueDTO);

    /**
     * 延长时间
     *
     * @param lengthenDateDTO
     */
    void lengthen(LengthenDateDTO lengthenDateDTO);

    /**
     * 导出单个延长时间
     *
     * @param lengthenDateDTO
     */
    void exportLengthen(LengthenDateDTO lengthenDateDTO);

    /**
     * 导出
     *
     * @param couponDeriveDTO
     */
    List<String> derive(CouponDeriveDTO couponDeriveDTO);

    /**
     * 导出详情
     *
     * @param acquireCouponDTO
     * @return
     */
    List<DeriveDetailVO> deriveDetail(AcquireCouponDTO acquireCouponDTO);

    /**
     * 设置小程序广告
     *
     * @param id
     * @param popupUrl
     */
    void setMiniBannerPopup(Long id, String popupUrl);

    /**
     * 导出列表失效
     *
     * @param checkId
     */
    void invalid(String checkId);

    /**
     * 调用存储过程
     */
    void callUpdateMarCouponStatus();

    /**
     * 领取列表失效
     *
     * @param clientCouponId
     */
    void inviteinvalid(Long clientCouponId);

    /**
     * 套餐参与判断
     *
     * @param comboId
     * @return
     */
    Boolean checkComboParticipation(String comboId);

    /**
     * 设置弹窗图
     *
     * @param img
     * @param marCouponId
     */
    void updatePopupUrl(String img, Long marCouponId);

    /**
     * 礼包优惠券列表
     *
     * @param marCouponPackCouponReqDTO
     * @return
     */
    List<MarCoupon> listByPackCouponReq(MarCouponPackCouponReqDTO marCouponPackCouponReqDTO);

    /**
     * 抽奖奖励列表
     * @param prizeVO
     * @return
     */
    List<PrizeVO> prizeList(PrizeVO prizeVO);

    /**
     * 禁用
     * @param couponId
     */
    void disable(Long couponId);

    /**
     * 全国优惠券
     * @param nationwideCouponDTO
     * @return
     */
    List<MarCoupon> nationwideCoupon(NationwideCouponDTO nationwideCouponDTO);

    void updateSurplusCount(Long id, int i);

    /**
     * 领取优惠券列表数据补全
     * @param list
     * @return
     */
    List<AcquireListVO> acquireCouponListomplement(List<AcquireListVO> list, AcquireCouponDTO acquireCouponDTO);

    /**
     *
     * @param groupCouponListDTO
     * @return
     */
    R<List<MarCouponVO>> groupCouponList(GroupCouponListDTO groupCouponListDTO);


    List<MarCouponVO> getByPositionAndCityName(GroupCouponListDTO groupCouponListDTO);
}
